package co.edu.javeriana.konigsberg.xavier.servicio;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.Stateful;
import javax.ejb.Stateless;

import co.edu.javeriana.konigsberg.xavier.dao.desc.ModalidadDAOLocal;
import co.edu.javeriana.konigsberg.xavier.dto.ModalidadDTO;
import co.edu.javeriana.konigsberg.xavier.entidad.Modalidad;

/**
 * Session Bean implementation class ModalidadServicio
 */
@Stateless
public class ModalidadServicio implements ModalidadServicioRemote, ModalidadServicioLocal {
	@EJB
	private ModalidadDAOLocal modalidadDAO;
	
	private static Map<BigInteger, ModalidadDTO> mapaModalidades;
	
	private List<ModalidadDTO> modalidadDTOs;
	
    /**
     * Default constructor. 
     */
    public ModalidadServicio() {
        // TODO Auto-generated constructor stub
    }
    
    @Override
    public List<ModalidadDTO> obtenerLista(){
    	
    	if(mapaModalidades == null){
    		modalidadDTOs = new ArrayList<ModalidadDTO>();
    		mapaModalidades = new HashMap<BigInteger, ModalidadDTO>();
			List<Modalidad> modalidades = modalidadDAO.obtenerLista();
			for (Modalidad modalidad : modalidades) {
				ModalidadDTO modalidadDTO = getDTO(modalidad);
				modalidadDTOs.add(modalidadDTO);
				mapaModalidades.put(modalidadDTO.getIdModalidad(), modalidadDTO);
			}
    	}
		return modalidadDTOs;
	}
    
	@Override
	public ModalidadDTO obtenerModalidadPorId(BigInteger id) {
		if(mapaModalidades == null){
			obtenerLista();
		}
		return mapaModalidades.get(id);
	}

	@Override
	public ModalidadDTO getDTO(Object entidad) {
		Modalidad modalidad = (Modalidad)entidad;
		ModalidadDTO modalidadDTO = new ModalidadDTO();
		modalidadDTO.setIdModalidad(modalidad.getIdModalidad());
		modalidadDTO.setNombreModalidad(modalidad.getNombreModalidad());
		return modalidadDTO;
	}

}
